perm filename PLTF80[MSS,LCS] blob
sn#102004 filedate 1974-05-12 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002
C00008 ENDMK
C⊗;
TITLE PLTF80 -- FORTRAN PLOT ROUTINES FOR FR-80 OUTPUT
COMMENT ⊗
APLOT(X,Y,UPDOWN) ←
IF ABS(UPDOWN)=2 THEN AVECT(X+FR80X0,Y+FR80Y0)
ELSE IF ABS(UPDOWN)=3 THEN AIVECT(X+FR80X0,Y+FR80Y0);
IF UPDOWN<0 THEN <FR80X0←X;FR80Y0←Y;>
OUTCMD(CMD) puts out one command on channel 17.
OUTCML(CMDL) does outcmd on successive words starting at
CMDL until a negative word is seen.
INFR80(DEV,FID,EXT) initializes FR80 output on the named file
on channel 17.
RLFR80 releases channel 17.
CMD ← FR80EC(<bits 3-8>,<bits 9-17>); (bits 0:2 get set to 2)
CMD ← FR80CD(<bits 4-6>,<bits 7-17>); checkpoint delimiter format
⊗
INTERNAL APLOT,OUTCMD,OUTCML,INFR80,RLFR80,FR80EC,FR80CD,FR80X0,FR80Y0
ARG← 16
CMD ← 0
A ← 1
B ← 2
C ← 3
XC ←← 0 ;X COORD
YC ←← 1 ;Y COORD
UPDOWN ←← 2;
APLOT: 0 ;BECAUSE OF BLECHEROUS FORTRAN CALL
MOVE CMD,@XC(ARG)
ADD CMD,FR80X0 ;ADD OFFSET
SKIPGE @UPDOWN(ARG) ;CORRECTING OFFSET?
MOVEM CMD,FR80X0 ;YES
ANDI CMD,37777 ;TRUNCATE IT
MOVM A,@UPDOWN(ARG) ;
CAIE A,2 ;ERROR CHECK
CAIN A,3 ;
SKIPA
OUTSTR [ASCIZ / ILLEGAL VALUE FOR UPDOWN IN CALL TO APLOT.
INVISIBLE VECTOR DRAWN/]
CAIN A,2 ;IF NOT A 2, THEN INVIS
TROA CMD,400000 ;AN AVECT X-PART
TRO CMD,100000 ;AN AIVECT X-PART
JSA ARG,OUTCMD ;PUT IT OUT
JUMP CMD
MOVE CMD,@YC(ARG) ;
ADD CMD,FR80Y0 ;
SKIPGE CMD,@UPDOWN(ARG)
MOVEM CMD,FR80Y0 ;UPDATE
ANDI CMD,37777 ;
TRO CMD,40000 ;SAY THE Y BIT IS ON
JSA ARG,OUTCMD ;PUT IT OUT
JUMP CMD
JRA ARG,3(ARG) ;RETURN
OP ←← 0
VAL ←← 1
FR80EC: LDB CMD,[POINT 6,@OP(ARG),=35] ;OP PART
LSH CMD,=9
LDB A,[POINT =9,@VAL(ARG),=35] ;VAL PART
TRO CMD,200000(A) ;
JRA ARG,2(ARG) ;RETURN
FR80CD: LDB CMD,[POINT 3,@OP(ARG),=35]
LSH CMD,=11
MOVE A,@VAL(ARG)
DPB A,[POINT =11,CMD,35]
JRA ARG,2(ARG)
OUTCML: 0 ;PUTS OUT A WHOLE LIST (-1) TERMINATES
MOVEI A,@(ARG) ;PICK UP POINTER TO LIST
OCML.X: SKIPGE (A) ;IS IT VALID
JRA ARG,1(ARG) ;NO--RETURN
JSA ARG,OUTCMD ;
JUMP (A) ;A POINTS AT A GOOD ONE
AOJA A,OCML.X ;GO BACK
OUTCMD: 0 ;FORTRAN CALL FOR ONE CMD
MOVE CMD,@(ARG)
OUT.XX: SOSGE FR80BH+2 ;ANY LEFT IN THIS BUFFER??
JRST .+3
IDPB CMD,FR80BH+1 ;
JRA ARG,1(ARG) ;RETURN
OUT 17,
JRST OUT.XX ;NOW PUT THINGS OUT
OUTSTR [ASCIZ /OUTPUT ERROR ON CHANNEL 17 (FR80)/]
HALT 1(ARG)
DEV ←← 0 ;SIXBIT DEVICE
FID ←← 1 ;SIXBIT FILEID
EXT ←← 2
INFR80: 0
SKIPN A,@DEV(ARG)
MOVSI A,'DSK'
MOVEM A,FR80DV
OPEN 17,FR80BK
JRST [ OUTSTR [ASCIZ /OPEN FAILED FOR FR80 OUTPUT (CHANNEL 17)/]
HALT 3(ARG)] ;RETURN
OUTBUF 17,6 ;GET SOME BUFFERS
MOVEI A,(<POINT =18,0>)
HRLM A,FR80BH+1 ;MUNCH BYTE COUNT
SKIPN A,@FID(ARG)
MOVE A,[SIXBIT /FR80/]
MOVEM A,FR80FI
SKIPN A,@EXT(ARG)
MOVSI A,'F80'
MOVEM A,FR80EX
ENTER 17,FR80FI ;ENTER
JRST [ OUTSTR [ASCIZ /ENTER FAILED ON FR80 OUTPUT FILE/]
HALT 3(ARG)] ;JUST RETURN
MOVEI CMD,20000 ; 2↑13 = 2↑14/2 = CENTER OF SCREEN
MOVEM CMD,FR80X0
SETZM FR80Y0
JRA ARG,3(ARG) ;RETURN
RLFR80: 0
RELEASE 17,
JRA ARG,(ARG)
FR80X0: 0 ;X & Y OFFSETS
FR80Y0: 0
FR80BH: 0 ;BUFFER HEADER
0
0
FR80FI: 0 ;LOOKUP BLOCK
FR80EX: 0
0
0
FR80BK: 0 ;OPEN BLOCK
FR80DV: 0
XWD FR80BH,0
END